返回首页

C#学习笔记——By Bug

笔记开始时间:2024.1.26 笔记更新时间:2024.2.22 当前笔记状态:基础篇已完结,高级篇暂不更新

前言

你好:

首先感谢你使用这份笔记手册,一起学习,一起进步,本学习笔记是我在自学过程(网课视频在下方链接)中的随手笔记,可能出现遗漏,顺序错误或语法,单词等错误,你可以在自己的学习过程中对这份笔记更正即可。

笔记结合了多个网课资料,顺序较为混乱。

下面是笔记部分参考资料: 视频资料: https://www.bilibili.com/video/BV1gR4y1b7oW/?p=6&share_source=copy_web&vd_source=ea0cf64e8dac6f0193a7e28187a0fccb

c#官方文档:C# 文档 - 入门、教程、参考。 | Microsoft Learn

前言到此结束。下面是笔记部分:


Visual Studio 下载与安装

下载

社区版下载地址Visual Studio Community Edition (microsoft.com)

安装

请参考vs官方安装教程: 安装 Visual Studio 并选择首选功能 | Microsoft Learn

image-20240126163837786

C#编程基础语法

注意:

  1. C#是大小写敏感的

  2. 所有的语句表达式都必须以(;)结尾

  3. 与Java不同的是,文件名可以不与类的名称相同

cs文件结构

关键字

关键字是对编译器有特殊意义的预定保留标识符,不能在程序中用作标示符

 

注释

变量

数据类型

image-20240127102057966

类型举例
整数类型byte、short、int、long
浮点类型float、double
十进制类型decimal
布尔类型bool
字符类型string、char
空类型null

 

创建赋值变量

 

字符类型

每个字符在存储时都对应一个数字825b9894ae154cffbdb6ffab7bd67261

####

数字与字符之间转换的方法

字符串拼接

字符串格式化输出

 

获取输入

获取一个数字,并转换为int类型

####

C#语法进阶

运算符

算数运算符

逻辑运算符

关系运算符

( >,<,>=,<=,==)

三元运算符

x?y:z -->如果为true,则取y的值,如果为false,则取z的值


流程控制

分支语句(if)

分支语句(switch-case )

循环语句(while)

循环语句(for)

循环语句(do-while)

数组

数组的声明

数组遍历

字符数组

字符串操作方法

  1. ToLower()——转换成小写字母、 ToUpper()——转换成大写字母

  2. Trim()——去除字符串两端的空格 TrimStrat()——去除字符串前端的空格 TrimEnd()——去除字符串后端的空格

  3. Split()——分割方法

    使用 String.Split 拆分字符串(C# 指南) - C# | Microsoft Learn

    下方代码将一个常用短语拆分为一个由每个单词组成的字符串数组。

    分隔符的每个实例都会在返回的数组中产生一个值。 连续的分隔符将生成空字符串作为返回的数组中的值。 下面的示例介绍如何创建空字符串,该示例使用空格字符作为分隔符。

    String.Split 可使用多个分隔符。 下面的示例使用空格、逗号、句点、冒号和制表符作为分隔字符,这些分隔字符在数组中传递到 Split。 代码底部的循环显示返回数组中的每个单词。

    String.Split 可采用字符串数组(充当用于分析目标字符串的分隔符的字符序列,而非单个字符)。

函数

定义

使用

参数

形参(形式参数)

在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参

实参(实际参数)

函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参

形参和实参的功能是传递数据,发生函数调用时,实参的值会传递给形参。

形参和实参的区别和联系

  1. 形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。

  2. 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。

  3. 实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。当然,如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型。

  4. 函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。

参数修饰符

修饰符种类

  1. 无修饰符:如果一个参数没有油参数修饰符标记,则认为它将按值传递,这将意味着被调用的方法收到原始数据的一份副本;

  2. out:输出参数由被调用的方法赋值,因此按引用传递。如果被调用的方法没有给输出的参数赋值,就会出现编译错误。(下端数据被修改后,上端数据也会随之变化) out最大的用途就是调用者只使用一次方法就能获得多个返回值。

  3. ref:调用者赋初值,并且可以由被调用的方法可选的重新赋值(数据也是按引用传递)。如果被调用的方法未能给ref参数赋值,也不会有编译错误。

  4. 其他请参见官方文档:方法参数按值传递。 修饰符启用按引用传递语义,包括只读和 out 参数等区别。 了解不同的参数传递模式以及如何使用它们。 参数修饰符允许一系列可选参数。 - C# | Microsoft Learn

返回值

参数数组

 

案例

函数重载-overload

重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。 重载的定义:函数名相同,函数的参数列表不同(包括参数个数和参数类型),至于返回类型可同可不同。 重载是可使函数、运算符等处理不同类型数据或接受不同个数的参数的一种方法

递归函数

在函数的内部再次调用这个函数。

案例

常量

枚举类型

Enum枚举:枚举是一组命名整型常量,枚举类型是使用 enum 关键字声明的。枚举是值类型,数据直接存储在栈中,而不是使用引用和真实数据的隔离方式来存储,其包含自己的值,且不能被继承或者传递继承,枚举中每个元素的基础类型是 int。可以使用冒号指定另一种整数值类型。

定义与使用枚举类型

结构体

结构体的作用就是把某一类的变量进行整合,组成一个新的数据类型,比如学生的信息(姓名,性别,年龄,成绩等等)

结构体的定义和使用

结构体中不只是可以定义属性,也可以定义函数。

 

委托

委托(Delegate) 是存有对某个方法(函数)的引用的一种引用类型变量。引用可在运行时被改变。

面向对象(OOP)

面向对象介绍

C# 是面向对象的编程语言。 面向对象编程的四项基本原则为:

面向对象就是一种编码的思想,简称(oop思想),这种编程思想可以让你在编码的过程中,对于类的使用变得更加的方便快捷,在不同的场合使用不同的类和对象,会让你的程序维护起来更加方便

异常捕捉

注意:再try块中的代码如果某一行出现了异常,后面的代码就不会再执行了,会跳到catch中。

类的定义

类是对一类具有相同特征或行为的事务的统称,是抽象的,不能直接使用

类相当于模板 对象 相当于由模板创造出来的实物

类的使用

声明属性

 

集合&字典

ArrayList-动态数组

List数组

字典

foreach遍历

 

构造函数

基本类型默认值 值类型的默认值:0 引用类型的默认值:null

构造函数是一种方法,其名称与其类型的名称相同。 其方法签名仅包含可选访问修饰符、方法名称和其参数列表;它不包含返回类型。

构造函数在new实例化时会被调用。

一般构造函数是对数据进行初始化的。

属性

匿名类型

程序内存区域

栈的空间较小,但读取速度较快; 栈(Stack)是只允许在一端进行插入或删除操作的线性表。

20210419182305159

栈中的数据只能从顶端插入和删除 把数据放入栈顶称为入栈(push)。 把数据从栈顶删除称为出栈(pop)。 -后进先出原则;

堆的空间较大,但读取速度较慢;

堆是一块内存区域,堆里的内存能够以任意顺序存入和移除

 

静态存储区

常量区(特殊的常量存储区,属于静态存储区)

  1. 常量占用内存,只读状态,决不可修改

  2. 常量字符串就是放在这里的,程序结束后由系统释放

值类型

基本数据类型 基本数据类型常被称为四类八种。

四类八种:

 

引用类型

(string,数组,自定义的类,内置的类) 引用类型需要两端内存。 第一段用于存储实际的数据,它总是在堆中。 第二段是一个引用,指向数据在堆中存放的位置。

值类型与引用类型的区别

20171025115141271

类继承

什么是继承?

继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。 当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类 C# 和 .NET 只支持单一继承。 也就是说,类只能继承自一个类。 不过,继承是可传递的。这样一来,就可以为一组类型定义继承层次结构。 比如在一个游戏中,两个人物的类中都具有很多相同的属性,这时我们可以让这两类继承同一个类

this方法--访问派生类数据成员

base方法--访问基类数据成员

派生类重写方法

虚方法(Virtual)

virtual 修饰符不能与 staticabstract``privateoverride 修饰符一起使用。 virtual 关键字用于修改方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。 例如,此方法可被任何继承它的类替代:

隐藏方法

 

 

抽象类

通过在类定义前面放置关键字 abstract,可以将类声明为抽象类。抽象类只有函数的定义,没有函数体。

抽象类不能实例化。 抽象类的用途是提供一个可供多个派生类共享的通用基类定义。 例如,类库可以定义一个抽象类,将其用作多个类库函数的参数,并要求使用该库的程序员通过创建派生类来提供自己的类实现。

密封类、密封方法

通过在类定义前面放置关键字 sealed,可以将类声明为密封类

密封类不能用作基类。 因此,它也不能是抽象类。 密封类禁止派生。 由于密封类从不用作基类,所以有些运行时优化可以略微提高密封类成员的调用速度。

在对基类的虚成员进行重写的派生类上,方法、索引器、属性或事件可以将该成员声明为密封成员。 在用于以后的派生类时,这将取消成员的虚效果。 方法是在类成员声明中将 sealed 关键字置于 override 关键字前面。

密封类不能被继承,密封方法不能被重写。 密封类不能被继承,密封方法不能被重写。

访问修饰符

所有类型和类型成员都具有可访问性级别。 该级别可以控制是否可以从你的程序集或其他程序集中的其他代码中使用它们。 程序集是通过在单个编译中编译一个或多个 .cs 文件而创建的 .dll 或 .exe。 可以使用以下访问修饰符在进行声明时指定类型或成员的可访问性:

image-20240201183403675

其他修饰符

接口

接口类似于类,接口使用

接口中只有方法的定义,没有具体的方法体

接口继承

与类不同一个类可以继承多个接口

索引器

参考官方文档

运算符重载

参考官方文档

泛型

例如,计算两个数的和时,两个类除了数据类型外,其他基本相同,如果再写一遍较为麻烦,所以可以使用泛型。

高级篇(暂未更新,以下为学习资料)

【C#编程-第四季-高级篇-宇宙最简单2022最新版】 https://www.bilibili.com/video/BV1mb4y1q78H/?p=2&share_source=copy_web&vd_source=ea0cf64e8dac6f0193a7e28187a0fccb

##